下方程式碼片段全部都是擷取自 Secure Code Warrior 線上安全程式培訓平台,因為練習互動時的題目多半不會只有單一個檔案,可能涉及多個檔案、資料夾及多處地方修改,因此我的文章主要是針對最主要的區塊做修改及說明,若有不好理解的地方非常抱歉也還請見諒,也可以實際上去 Secure Code Warrior 玩玩看,搭配著互動,會更有感的學習哦~
Message msg = new Message(receiverName, Message.Type.chat);
msg.setBody(encryptOrDecryptXOR(message, receiverName));
if (connection != null) {
connection.sendPacket(msg);
return true;
}else{
return false;
}
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
xor不是一個安全的加密演算法
public boolean sendMessage(String receiverName, String message, String type) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", type);
if(type.equals("key")){
jsonObject.put("data", message);
}else {
Cipher cipher = Cipher.getInstance(RSAEncryption.getInstance(mContext).getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, RSAEncryption.loadPublicKeyFromString(receiverPublicKey));
jsonObject.put("data",new String(cipher.doFinal(message.getBytes())));
}
Message msg = new Message(receiverName, Message.Type.chat);
msg.setBody(jsonObject.toString());
if (connection != null) {
connection.sendPacket(msg);
return true;
} else {
return false;
}
} catch (Exception e) {
if (BuildConfig.DEBUG) {
e.printStackTrace();
}
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:使用安全的RSA加密演算法,並確保只有在處於開發模式,且捕獲異常時才會打印出錯誤的詳細堆棧訊息,避免將詳細的錯誤信息暴露給最終用戶或生產環境。
KeyProperties.KEY_ALGORITHM_3DES, "AndroidKeyStore");
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:3DES也是過舊的演算法了
KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:改成 RSA 或 AES256 都可以